﻿namespace GamePlus.OpenAuth.V20
{
    using System;
    using System.Collections.Generic;
    using System.Net;
    using System.Runtime.CompilerServices;
    using System.Runtime.Serialization;

    [Serializable]
    public class WeiboException : WebException
    {
        // Methods
        public WeiboException()
        {
        }

        public WeiboException(string message)
            : base(message)
        {
        }

        protected WeiboException(SerializationInfo info, StreamingContext context)
            : base(info, context)
        {
        }

        public WeiboException(string message, WebException inner)
            : base(message, inner)
        {
        }

        public WeiboException(string code, string status, string request)
            : base(GetErrorMsg(code))
        {
            this.ErrorCode = code;
            this.ErrorStatus = status;
            this.Request = request;
            this.ErrorMessage = GetErrorMsg(code);
        }

        private static string GetErrorMsg(string errorCode)
        {
            Dictionary<string, string> dictionary2 = new Dictionary<string, string>();
            dictionary2.Add("0", "unknown error:未知错误");
            dictionary2.Add("1", "network error:网络问题");
            dictionary2.Add("10001", "系统错误");
            dictionary2.Add("10002", "服务端资源不可用");
            dictionary2.Add("10003", "远程服务出错");
            dictionary2.Add("10005", "该资源需要appkey拥有更高级的授权");
            dictionary2.Add("10006", "缺少source参数(appkey)");
            dictionary2.Add("10007", "不支持的MediaType(%s)");
            dictionary2.Add("10008", "错误:参数错误，请参考API文档");
            dictionary2.Add("10009", "任务过多，系统繁忙");
            dictionary2.Add("10010", "任务超时");
            dictionary2.Add("10011", "RPC错误");
            dictionary2.Add("10012", "非法请求");
            dictionary2.Add("10013", "不合法的微博用户");
            dictionary2.Add("10014", "第三方应用访问api接口权限受限制");
            dictionary2.Add("10016", "错误:缺失必选参数:%s，请参考API文档");
            dictionary2.Add("10017", "错误:参数值非法,希望得到(%s),实际得到(%s)，请参考API文档");
            dictionary2.Add("10018", "请求长度超过限制");
            dictionary2.Add("10020", "接口不存在");
            dictionary2.Add("10021", "请求的HTTP METHOD不支持");
            dictionary2.Add("10022", "IP请求超过上限");
            dictionary2.Add("10023", "用户请求超过上限");
            dictionary2.Add("10024", "用户请求接口%s超过上限");
            dictionary2.Add("10025", "内部接口参数错误");
            dictionary2.Add("20001", "IDS参数为空");
            dictionary2.Add("20002", "uid参数为空");
            dictionary2.Add("20003", "用户不存在");
            dictionary2.Add("20005", "不支持的图片类型,仅仅支持JPG,GIF,PNG");
            dictionary2.Add("20006", "图片太大");
            dictionary2.Add("20007", "请确保使用multpart上传了图片");
            dictionary2.Add("20008", "内容为空");
            dictionary2.Add("20009", "id列表太长了");
            dictionary2.Add("20012", "输入文字太长，请确认不超过140个字符");
            dictionary2.Add("20013", "输入文字太长，请确认不超过300个字符");
            dictionary2.Add("20014", "传入参数有误，请再调用一次");
            dictionary2.Add("20016", "发微博太多啦，休息一会儿吧");
            dictionary2.Add("20017", "你刚刚已经发送过相似内容了哦，先休息一会吧");
            dictionary2.Add("20019", "不要太贪心哦，发一次就够啦");
            dictionary2.Add("20023", "很抱歉，此功能暂时无法使用，如需帮助请联系@微博客服或者致电客服电话400-690-0000");
            dictionary2.Add("20031", "需要弹出验证码");
            dictionary2.Add("20032", "微博发布成功。目前服务器数据同步可能会有延迟，请耐心等待1-2分钟。谢谢");
            dictionary2.Add("20033", "登陆状态异常");
            dictionary2.Add("20101", "不存在的微博");
            dictionary2.Add("20102", "不是你发布的微博");
            dictionary2.Add("20103", "不能转发自己的微博");
            dictionary2.Add("20109", "微博id为空");
            dictionary2.Add("20111", "不能发布相同的微博");
            dictionary2.Add("20112", "由于作者隐私设置，你没有权限查看此微博");
            dictionary2.Add("20114", "标签名太长");
            dictionary2.Add("20115", "标签不存在");
            dictionary2.Add("20116", "标签已存在");
            dictionary2.Add("20117", "最多200个标签");
            dictionary2.Add("20118", "最多5个标签");
            dictionary2.Add("20119", "标签搜索失败");
            dictionary2.Add("20120", "由于作者设置了可见性，你没有权限转发此微博");
            dictionary2.Add("20121", "visible参数非法");
            dictionary2.Add("20122", "应用不存在");
            dictionary2.Add("20123", "最多屏蔽200个应用");
            dictionary2.Add("20124", "最多屏蔽500条微博");
            dictionary2.Add("20125", "没有屏蔽过此应用");
            dictionary2.Add("20126", "不能屏蔽新浪应用");
            dictionary2.Add("20127", "已添加了此屏蔽");
            dictionary2.Add("20128", "删除屏蔽失败");
            dictionary2.Add("20129", "没有屏蔽任何应用");
            dictionary2.Add("20201", "不存在的微博评论");
            dictionary2.Add("20203", "不是你发布的评论");
            dictionary2.Add("20204", "评论ID为空");
            dictionary2.Add("20206", "作者只允许关注用户评论");
            dictionary2.Add("20207", "作者只允许可信用户评论");
            dictionary2.Add("20401", "域名不存在");
            dictionary2.Add("20402", "verifier错误");
            dictionary2.Add("20403", "屏蔽用户列表中存在此uid");
            dictionary2.Add("20404", "屏蔽用户列表中不存在此uid");
            dictionary2.Add("20405", "uid对应用户不是登录用户的好友");
            dictionary2.Add("20406", "屏蔽用户个数超出上限");
            dictionary2.Add("20407", "没有合适的uid");
            dictionary2.Add("20408", "从feed屏蔽列表中，处理用户失败");
            dictionary2.Add("20501", "错误:source_user或者target_user用户不存在");
            dictionary2.Add("20502", "必须输入目标用户id或者screen_name");
            dictionary2.Add("20503", "关系错误，user_id必须是你关注的用户");
            dictionary2.Add("20504", "你不能关注自己");
            dictionary2.Add("20505", "加关注请求超过上限");
            dictionary2.Add("20506", "已经关注此用户");
            dictionary2.Add("20507", "需要输入验证码");
            dictionary2.Add("20508", "根据对方的设置，你不能进行此操作");
            dictionary2.Add("20509", "悄悄关注个数到达上限");
            dictionary2.Add("20510", "不是悄悄关注人");
            dictionary2.Add("20511", "已经悄悄关注此用户");
            dictionary2.Add("20512", "你已经把此用户加入黑名单，加关注前请先解除");
            dictionary2.Add("20513", "你的关注人数已达上限");
            dictionary2.Add("20522", "还未关注此用户");
            dictionary2.Add("20523", "还不是粉丝");
            dictionary2.Add("20601", "列表名太长，请确保输入的文本不超过10个字符");
            dictionary2.Add("20602", "列表描叙太长，请确保输入的文本不超过70个字符");
            dictionary2.Add("20603", "列表不存在");
            dictionary2.Add("20604", "不是对象所属者");
            dictionary2.Add("20605", "列表名或描叙不合法");
            dictionary2.Add("20606", "记录已存在");
            dictionary2.Add("20607", "错误:数据库错误，请联系系统管理员");
            dictionary2.Add("20608", "列表名冲突");
            dictionary2.Add("20610", "目前不支持私有分组");
            dictionary2.Add("20611", "创建list失败");
            dictionary2.Add("20612", "目前只支持私有分组");
            dictionary2.Add("20613", "错误:不能创建更多的列表");
            dictionary2.Add("20614", "已拥有列表上下，请参考API文档");
            dictionary2.Add("20615", "成员上线，请参考API文档");
            dictionary2.Add("20616", "不支持的分组类型");
            dictionary2.Add("20617", "最大返回300条");
            dictionary2.Add("20618", "uid不在列表中");
            dictionary2.Add("20701", "不能提交相同的标签");
            dictionary2.Add("20702", "最多两个标签");
            dictionary2.Add("20704", "您已经收藏了此微博");
            dictionary2.Add("20705", "此微博不是您的收藏");
            dictionary2.Add("20706", "操作失败");
            dictionary2.Add("20801", "trend_name是空值");
            dictionary2.Add("20802", "trend_id是空值");
            dictionary2.Add("21001", "标签参数为空");
            dictionary2.Add("21002", "标签名太长，请确保每个标签名不超过14个字符");
            dictionary2.Add("21103", "该用户已经绑定手机");
            dictionary2.Add("21104", "verifier错误");
            dictionary2.Add("21105", "你的手机号近期频繁绑定过多个帐号，如果想要继续绑定此帐号，请拨打客服电话400-690-0000申请绑定");
            dictionary2.Add("21108", "原始密码错误");
            dictionary2.Add("21109", "新密码错误");
            dictionary2.Add("21110", "此用户暂时没有绑定手机");
            dictionary2.Add("21113", "教育信息不存在");
            dictionary2.Add("21115", "职业信息不存在");
            dictionary2.Add("21117", "此用户没有qq信息");
            dictionary2.Add("21120", "此用户没有微号信息");
            dictionary2.Add("21121", "此微号已经存在");
            dictionary2.Add("21301", "认证失败");
            dictionary2.Add("21302", "用户名或密码不正确");
            dictionary2.Add("21303", "用户名密码认证超过请求限制");
            dictionary2.Add("21304", "版本号错误");
            dictionary2.Add("21305", "缺少必要的参数");
            dictionary2.Add("21306", "Oauth参数被拒绝");
            dictionary2.Add("21307", "时间戳不正确");
            dictionary2.Add("21308", "nonce参数已经被使用");
            dictionary2.Add("21309", "签名算法不支持");
            dictionary2.Add("21310", "签名值不合法");
            dictionary2.Add("21311", "consumer_key不存在");
            dictionary2.Add("21312", "consumer_key不合法");
            dictionary2.Add("21313", "consumer_key缺失");
            dictionary2.Add("21314", "Token已经被使用");
            dictionary2.Add("21315", "Token已经过期");
            dictionary2.Add("21316", "Token不合法");
            dictionary2.Add("21317", "Token不合法");
            dictionary2.Add("21318", "Pin码认证失败");
            dictionary2.Add("21319", "授权关系已经被解除");
            dictionary2.Add("21320", "不支持的协议");
            dictionary2.Add("21321", "未审核的应用使用人数超过限制");
            dictionary2.Add("21322", "重定向地址不匹配");
            dictionary2.Add("21323", "请求不合法");
            dictionary2.Add("21324", "client_id或client_secret参数无效");
            dictionary2.Add("21325", "提供的Access Grant是无效的、过期的或已撤销的");
            dictionary2.Add("21326", "客户端没有权限");
            dictionary2.Add("21327", "token过期");
            dictionary2.Add("21328", "不支持的GrantType");
            dictionary2.Add("21329", "不支持的ResponseType");
            dictionary2.Add("21330", "用户或授权服务器拒绝授予数据访问权限");
            dictionary2.Add("21331", "服务暂时无法访问");
            dictionary2.Add("21332", "access_token无效");
            dictionary2.Add("21333", "禁止使用此认证方式");
            Dictionary<string, string> dictionary = dictionary2;
            if (dictionary.ContainsKey(errorCode))
            {
                return dictionary[errorCode];
            }
            return "未知错误";
        }

        // Properties
        public string ErrorCode { get; private set; }

        public string ErrorMessage { get; private set; }

        public string ErrorStatus { get; private set; }

        public string Request { get; private set; }
    }

}

